// package关键字：用于声明包路径，将相关类组织在一起，避免类名冲突
package com.itheima.polymorphsm1;

// public：访问修饰符，表示这个类可以被其他任何类访问
// class：定义类的关键字
// Wolf：类名
// extends Animal：extends关键字表示继承关系，Wolf类是Animal类的子类
// 子类可以继承父类的非私有成员（属性和方法）
public class Wolf extends Animal{
    // String：字符串数据类型
    // name：成员变量名
    // "狼"：初始值
    // 这里的name变量与父类Animal中的name变量同名，在子类中重新定义了一个新的name变量
    // 注意：在多态中，父类引用访问成员变量时，访问的是父类的成员变量
    String name = "狼";

    // @Override：重写注解，标记这个方法是重写父类的方法
    // 它不是必须的，但加上它可以帮助编译器检查是否正确重写了父类方法
    @Override
    // public：访问修饰符，保持与父类方法相同或更宽松的访问权限
    // void：返回值类型，表示没有返回值
    // run()：方法名，与父类中的方法名相同
    // 方法重写的条件：方法签名（方法名和参数列表）必须与父类完全相同
    public void run() {
        // System.out.println()：Java的输出语句
        // "🐺跑的贼溜~~~"：输出的内容，这里是狼的特有跑法描述
        // 子类重写了run方法，提供了与父类不同的实现
        System.out.println("🐺跑的贼溜~~~");
    } // run方法结束
} // Wolf类结束
